package com.lihaozhe.orderservice.client;

import com.lihaozhe.userservice.dto.UserDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * 用户服务Feign客户端接口
 * <p>
 * FeignClient注解说明：
 * - name: 指定要调用的服务名称（在Eureka中注册的服务名）
 * - path: 可选的请求路径前缀
 * - configuration: 自定义配置类
 * <p>
 * 工作原理：
 * 1. Spring启动时会为这个接口创建动态代理
 * 2. 当调用接口方法时，Feign会构造HTTP请求
 * 3. 通过服务发现找到对应的服务实例
 * 4. 发送HTTP请求并解析响应
 *
 * @author 李昊哲
 * @version 1.0.0
 */
@FeignClient(name = "user-service", path = "/api/users")
public interface UserServiceClient {
  /**
   * 根据用户ID获取用户信息
   * 对应 user-service 的 GET /api/users/{id}
   *
   * @param id 用户ID
   * @return 用户信息
   */
  @GetMapping("/{id}")
  UserDTO getUserById(@PathVariable("id") Long id);

  /**
   * 获取所有用户列表
   * 对应 user-service 的 GET /api/users
   *
   * @return 用户列表
   */
  @GetMapping
  List<UserDTO> getAllUsers();

  /**
   * 创建新用户
   * 对应 user-service 的 POST /api/users
   *
   * @param user 用户信息
   * @return 创建的用户
   */
  @PostMapping
  UserDTO createUser(@RequestBody UserDTO user);

  /**
   * 健康检查
   * 对应 user-service 的 GET /api/users/health
   *
   * @return 健康状态
   */
  @GetMapping("/health")
  String healthCheck();
}
